import { getRootWindow } from '@src/util/dom'
import { getRootWindowInitData } from '@src/util/window'
import { isOpenTriggerGray } from '@src/util/grayInfo'
import { SHBProductLineEnum, SHBEditionEnum } from "@shb-lib/tenant"

const rootWindowInitData = getRootWindowInitData()

interface CompanyConfigDto {
  hideRemote: boolean, // 是否隐藏远程设置
  hidePay: boolean  // 是否隐藏支付
}
interface NewsConfigDto {
  hideSubscribe: boolean, // 是否隐藏订阅
}
interface PersonalConfigDto {
  hideWx: boolean, // 是否隐藏wx
  hidePhone: boolean, // 是否隐藏phone
  hideData: boolean, // 是否隐藏个人数据
  hideTrail: boolean  // 是否隐藏轨迹
}
interface BasicEditionAuth {
  companyConfigDto?: CompanyConfigDto
  control?: boolean  // 是否需要控制
  hideApi?: boolean  // 是否隐藏api
  hideCompany?: boolean  // 是否隐藏公司账号
  hideEvent?: boolean  // 是否隐藏事件
  hideNews?: boolean  // 是否隐藏消息设置
  hideOperationsAnalysis?: boolean  // 是否隐藏运营分析
  hidePart?: boolean  // 是否隐藏备件
  hidePersonal?: boolean  // 是否隐藏个人中心
  hideProduct?: boolean  // 是否隐藏产品
  hideSelfService?: boolean   // 是否隐藏自助门户
  hideServe?: boolean  // 是否隐藏服务
  hideknowledge?: boolean  // 是否隐藏知识库
  hideServiceReport?: boolean // 是否隐藏服务报告
  hidePrintTask?: boolean // 是否隐藏服打印
  hideSystemCard?: boolean // 是否隐藏系统组件
  hidePlanWork?: boolean // 是否隐藏计划任务
  newsConfigDto?: NewsConfigDto
  personalConfigDto?: PersonalConfigDto
  hideNavigation?: boolean  // 是否隐藏功能导航
  hideOtherConfigure?: boolean  // 是否隐藏其他向导	
  hideCallCenter?: boolean  // 是否隐藏呼叫中心	
  hideCustomReport?: boolean  // 是否隐藏自定义报表	
}

function getRootWindowEditionData(): number {
  const RootWindow: any = getRootWindow(window)
  let edition: number = 1
  
  try {
    edition = RootWindow.shbEdition || 1
  } catch (error) {
    edition = 1
    console.warn('Caused: getRootWindowEditionData -> error', error)
  }
  
  return edition
}

// 是否是新版售后宝
export function isNewVersion(): boolean {
  return rootWindowInitData.cloudVersion || false
}

// 获取新版售后宝的版本列表
export function getRootWindowEditionListData() {
  return rootWindowInitData.editionList || []
}

// 获取新版售后宝的产品线列表
export function getRootWindowProductLineListData() {
  return rootWindowInitData.productLineList || []
}

// 是否是纯客服云版本
export function isOnlyCustomerServiceCloudVersion() {
  const editionList = getRootWindowEditionListData()
  return isNewVersion() && editionList && editionList.length == 1 && editionList[0] == 6
}

// 是否允许切换语言包 老版本不限制，新版本只有国际化账号才允许切换语言包
export function allowSwitchLanguage(): boolean {
  let result: boolean = true
  if(isNewVersion()) {
    result = Boolean(rootWindowInitData?.user?.accountType)
  } 
  return result
}
/** 
 * @description 是否为 非纯客服云版本
*/
export function isNotOnlyCustomerServiceCloudVersion() {
  return !isOnlyCustomerServiceCloudVersion()
}

// 不包含客服云版本
export function notIncludeCustomerServiceCloudVersion() {
  if (!isNewVersion()) return false
  const editionList = getRootWindowEditionListData()
  return isNewVersion() && editionList && !editionList.includes(6)
}

// 是否是服务云标准版版本
export function isOnlyServiceCloudBasicVersion() {
  const editionList = getRootWindowEditionListData()
  return isNewVersion() && editionList && editionList.length == 1 && editionList[0] == 7
}

// 是否是服务云标准版+客服云版本
export function isBscAndCscVersion() {
  const editionList = getRootWindowEditionListData()
  return isNewVersion() && editionList && editionList.length == 2 && editionList.includes(6) && editionList.includes(7)
}

// 是否包含服务云+客服云两条产品线
export function productLineIncludeBscAndCsc() {
  const productLineList = getRootWindowProductLineListData()
  return isNewVersion() && productLineList.includes(SHBProductLineEnum.BusinessServiceCloud) && productLineList.includes(SHBProductLineEnum.CustomerServiceCloud)
}

// 是否包含服务云企业版
export function hasBSCEnterpriseEdition() {
  if (!isNewVersion()) return false
  const editionList = getRootWindowEditionListData()
  if (!editionList) return false
  const enterpriseEditions = [
    SHBEditionEnum.BSC_ENTERPRISE_EDITION,
    SHBEditionEnum.BSC_INTELLIGENCE_EDITION,
    SHBEditionEnum.BSC_INTERNATIONAL_EDITION,
  ]
  return enterpriseEditions.some(edition => editionList.includes(edition))
}

function getRootWindowBasicEditionAuth() {
  const RootWindow: any = getRootWindow(window)
  let basicEditionAuth: BasicEditionAuth
  
  try {
    basicEditionAuth = RootWindow.basicEditionAuth || {}
  } catch (error) {
    basicEditionAuth = {}
    console.warn('Caused: getRootWindowBasicEditionAuth -> error', error)
  }
  
  return basicEditionAuth;
}


function commonJudgeShow(): boolean {
  // 标准版
  if (isStandardEdition()) return false
  
  // 企业版
  if (isEnterpriseEdition()) return true
  
  // 老版本vip版
  if(isOldVipEdition()) return true
  
  // 体验版
  if (isExperienceEdition()) return false
  
  return false
}

// 是否为老版本vip版
export function isOldVipEdition(): boolean {
  return getRootWindowEditionData() === 1
}

// 是否为标准版
export function isStandardEdition(): boolean {
  return getRootWindowEditionData() === 2 || getRootWindowEditionData() === 4
}

// 是否为企业版
export function isEnterpriseEdition(): boolean {
  return getRootWindowEditionData() === 3
}

// 是否为体验版
export function isExperienceEdition(): boolean {
  return getRootWindowEditionData() === 4
}

// 是否为基础版
export function isBasicEdition(): boolean {
  return getRootWindowEditionData() === 5
}

/** 
 * 是否显示可以创建子团队
 * 根据 initData里面的 showNewTeam 判断
*/
export function isShowCreateChildrenTeam(initData: any): boolean {
  return initData?.showNewTeam === true
}

/** 
 * 是否显示 备件调拨
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowPartTransfer(): boolean {
  return commonJudgeShow()
}

/** 
 * 是否显示 备件申领
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowPartApply(): boolean {
  return commonJudgeShow()
}

/** 
 * 是否显示 备件退回
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowPartBack(): boolean {  
  return commonJudgeShow()
}

/** 
 * 是否显示 备件退回
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowQuality(): boolean {  
  return commonJudgeShow()
}
/** 
 * 是否显示 客户批量提醒 (都支持)
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowCustomerRemind(): boolean {
  return true
}

/** 
 * @deprecated
 * 是否显示 数据大屏
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowDashboardScreen(): boolean {
  return commonJudgeShow()
}

/** 
 * 是否显示 计划任务
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowPlanTask(): boolean {
  return commonJudgeShow()
}

/** 
 * 是否显示 服务报告
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
*/
export function isShowReport(): boolean {
  return commonJudgeShow()
}

/**
 * @description 是否显示 自助门户
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
 * @return {Boolean} 是否支持开启显示
 */
export function isShowSelfServicePortal(): boolean {
  return true
}

/**
 * @description 是否显示 自助门户
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
 * @return {Boolean} 是否支持开启显示
 */
export function isShowLinkC(): boolean {
  return commonJudgeShow()
}

/**
 * @description 是否显示 多备件库
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
 * @return {Boolean} 是否支持开启显示
 */
export function isShowMoreSperaParts(): boolean {
  return commonJudgeShow()
}

/**
 * @description 是否显示 工时记录
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
 * @return {Boolean} 是否支持开启显示
 */
export function isShowCardWorkTime(): boolean {
  return commonJudgeShow()
}

/**
 * @description 是否显示发送服务报告功能
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
 * @return {Boolean} 是否支持开启显示
 */
export function isShowBatchSendingServiceReports(): boolean {
  return commonJudgeShow()
}

/**
 * @description 标准版门户在商城库内，不需要显示外部链接和访问量
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
 * @return {Boolean} 是否支持开启显示
 */
export function isShowExternalUrlAndVisits(): boolean {
  return commonJudgeShow()
}

/**
 * @description 标准版不显示微信公众号设置
 * 1. 老版本vip版 支持
 * 2. 标准版 不支持
 * 3. 企业版 原生支持
 * @return {Boolean} 是否支持开启显示
 */
export function isShowWxSet(): boolean {
  return commonJudgeShow()
}

/**
 * @description 基础版是否隐藏支付
 * @return {Boolean} 是否支持开启显示
 */
export function isBasicEditionHidePay(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.companyConfigDto?.hidePay) {
    return auth.companyConfigDto.hidePay
  }
  
  return false
}

/**
 * @description 基础版是否隐藏事件
 * @return {Boolean} 是否支持开启显示
 */
export function isBasicEditionHideEvent(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideEvent) {
    return auth.hideEvent
  }
  
  return false
}

/**
 * @description 基础版是否隐藏备件
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHidePart(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hidePart) {
    return auth.hidePart
  }

  return false
}

/**
 * @description 基础版是否隐藏产品
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideProduct(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideProduct) {
    return auth.hideProduct
  }

  return false
}

/**
 * @description 基础版是否隐藏服务
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideServe(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideServe) {
    return auth.hideServe
  }

  return false
}

/**
 * @description 基础版是否隐藏服务报告
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideServiceReport(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideServiceReport) {
    return auth.hideServiceReport
  }

  return false
}

/**
 * @description 基础版是否隐藏打印
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHidePrintTask(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hidePrintTask) {
    return auth.hidePrintTask
  }

  return false
}

/**
 * @description 基础版是否隐藏系统组件
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideSystemCard(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideSystemCard) {
    return auth.hideSystemCard
  }

  return false
}

/**
 * @description 基础版是否隐藏计划任务
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHidePlanWork(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hidePlanWork) {
    return auth.hidePlanWork
  }

  return false
}

/**
 * @description 基础版是否隐藏api
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideApi(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideApi) {
    return auth.hideApi
  }

  return false
}

/**
 * @description 基础版是否隐订阅
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideSubscribe(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.newsConfigDto?.hideSubscribe) {
    return auth.newsConfigDto.hideSubscribe
  }

  return false
}

/**
 * @description 基础版是否隐订阅
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideCallCenter(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideCallCenter) {
    return auth.hideCallCenter
  }

  return false
}

/**
 * @description 基础版是否控制隐藏
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionControl(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.control) {
    return auth.control
  }

  return false
}

/**
 * @description 基础版是否控制隐藏
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideCustomReport(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideCustomReport) {
    return auth.hideCustomReport
  }

  return false
}

/**
 * @description 基础版是否隐藏知识库
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideknowledge(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideknowledge) {
    return auth.hideknowledge
  }

  return false
}

/**
 * @description 基础版是否隐藏知运营分析
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideOperationsAnalysis(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideOperationsAnalysis) {
    return auth.hideOperationsAnalysis
  }

  return false
}

/**
 * @description 基础版是否隐藏自助门户
 * @return {Boolean} 是否支持开启显示
 */
 export function isBasicEditionHideSelfService(): boolean {
  const auth = getRootWindowBasicEditionAuth()
  if (auth?.hideSelfService) {
    return auth.hideSelfService
  }
  
  return false
}
